#include <stdio.h>
#include "miracl.h"

int main() {
    // 初始化 MIRACL
    miracl *mip = mirsys(5000, 10); // 5000 是精度（位数），10 是进制

    // 定义大整数
    big a, b, sum, difference, product, quotient, remainder, result;

    // 为大整数分配内存
    a = mirvar(0);
    b = mirvar(0);
    sum = mirvar(0);
    difference = mirvar(0);
    product = mirvar(0);
    quotient = mirvar(0);
    remainder = mirvar(0);
    result = mirvar(0);

    // 将字符串转换为大整数
    cinstr(a, "123456789012345678901234567890");
    cinstr(b, "987654321098765432109876543210");

    // 显示输入的数字
    printf("a = ");
    cotnum(a, stdout);
    printf("b = ");
    cotnum(b, stdout);

    // 执行加法
    add(a, b, sum);
    printf("\n加法结果 = ");
    cotnum(sum, stdout);

    // 执行减法
    subtract(b, a, difference);
    printf("减法结果 = ");
    cotnum(difference, stdout);

    // 执行乘法
    multiply(a, b, product);
    printf("乘法结果 = ");
    cotnum(product, stdout);

    // 执行除法
    divide(a, b, quotient);
    printf("商 = ");
    cotnum(quotient, stdout);

    // 使用 modulo 计算余数
    divide(a, b, product);
    printf("余数 = ");
    cotnum(product, stdout);

    // 执行乘方运算 (a^2) 使用乘方函数
    powmod(a, mirvar(2), b, result);  // 假设'b'为模数的简单幂模运算
    printf("乘方结果 (a^2 mod b) = ");
    cotnum(result, stdout);

    // 清理
    mirexit(); // 清理 MIRACL

    return 0;
}
